<template>
  <div class="app-container">
    <div class="ces-main">



      <el-form :model="FormData" :inline="true" label-position="right" label-width="120px">


        <el-form-item v-if="this.StepSN == 0 || this.StepSN == -999" style="height:5px">

          <el-button type="primary" size="mini" icon="el-icon-tickets" @click="confirmData(0)">保存</el-button>
        </el-form-item>
        <el-form-item v-if="this.StepSN == 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="confirmData(1)">提交</el-button>
        </el-form-item>

        <el-form-item v-if="this.StepSN > 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-tickets" @click="confirmData(0)">保存</el-button>
        </el-form-item>
        <el-form-item v-if="this.StepSN > 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="confirmData(3)">退回上一步</el-button>
        </el-form-item>
        <el-form-item v-if="this.StepSN > 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="confirmData(2)">审核</el-button>
        </el-form-item>
        <el-form-item style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="handleAdd()">新增</el-button>
        </el-form-item>
        <el-form-item style="height:5px">

          <el-button type="primary" size="mini" icon="el-icon-tickets" @click="PrintDate()">打印</el-button>
        </el-form-item>
        <el-form-item style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="handleClose()">关闭</el-button>
        </el-form-item>


      </el-form>

      <span style="
            text-align: center;
            font-size: 20px;
            font-weight: bold;
            display: inline-block;
            width: 100%;
            padding: 3px 0 5px 0;
          ">
        <span>销售订单</span>
        <span style="margin-left: 10px">
          <svg-icon v-if="this.FormData.Status == 0 || this.FormData.Status == null" icon-class="Editing" />
          <svg-icon v-if="this.FormData.Status == 1" icon-class="ingAudit" />
          <svg-icon v-if="this.FormData.Status == 2" icon-class="Finish" />
        </span>
      </span>

      <el-form :model="FormData" label-width="90px">
        <Mian-Form ref="refFormData" labelWidth='100px' :FormData='FormData' :tableCols='FormCols' :StepSN='StepSN'
          @handleOpen="handleOpen"></Mian-Form>
      </el-form>


      <el-form :inline="true" :model="Search" class="demo-form-inline" size="mini">
      </el-form>

      <section class="ces-handle">
        <el-button v-if="this.StepSN == 0 || this.StepSN == -999" type="primary" size="mini" @click="handleOpen('PrdNo')"
          icon="el-icon-tickets">添加产品</el-button>

        <el-button v-if="1 != 1" type="primary" size="mini" @click="handleMRPData()" icon="el-icon-tickets">订单运算</el-button>

        <el-button v-if="this.CompanyAppCode == '03'" type="primary" size="mini" @click="handlebarcode()"
          icon="el-icon-tickets">条码生成</el-button>
      </section>
      <ces-table size='mini' ref="reftableData" :refs='reftableData' :isSelection='false' :isIndex='true'
        :isSearch='false' :isHandle='true' :Isfunfail='this.StepSN == 0 || this.StepSN == -999 ? true : false' :IsfunEdit='false'
        :funEditName='BOM' :StepSN=this.StepSN :WFStepSN='WFStepSN' :tableData='tableData' :tableCols='tableCols'
        @handleDelete="delData" @handleEdit='handleEdit' @handrowclick="handrowclick">
      </ces-table>
    </div>


    <el-main style="margin: 1px 10px">
      <span class="blueColor" style="font-size: 15px; font-weight: blod; padding: 10px">审核明细：</span>

      <el-timeline :reverse="true" ref="ListLog" :model="ListLog">
        <el-timeline-item v-for="(activity, index) in ListLog" :key="index" :timestamp="activity.CreateDateTime">
          {{ activity.Remark }}
        </el-timeline-item>
      </el-timeline>
    </el-main>


    <el-dialog v-if="dialogFormVisible" :visible.sync="dialogFormVisible" :title="人员资料" width="800px">
      <el-form :model="name" label-width="80px" label-position="left">
        <v-AccountOpen :ParmType="ParmType" @FunRowAdd="FunrRowsAdd"></v-AccountOpen>
      </el-form>
    </el-dialog>


    <el-dialog v-if="dialogCUSTVisible" :visible.sync="dialogCUSTVisible" :title="客户资料" width="800px">
      <el-form :model="name" label-width="80px" label-position="left">
        <v-CUSTOpen :ParmType="ParmType" :CUSTtype='1' @FunRowAdd="FunrRowsAdd"></v-CUSTOpen>
      </el-form>
    </el-dialog>


    <!-- 11 -->
    <el-dialog v-if="dialogPRDTVisible" :visible.sync="dialogPRDTVisible" :title="料品资料" width="800px">
      <el-form :model="name" label-width="80px" label-position="left">
        <v-PRDTOpen :ParmType="ParmType" :Where="ProWhere" @FunRowAdd="FunrRowsAdd" KeyName='PrdNo'></v-PRDTOpen>
      </el-form>
    </el-dialog>




    <el-dialog v-if="dialogbarcodeVisible" :visible.sync="dialogbarcodeVisible" :title="条码打印" width="800px">
      <el-form :model="name" label-width="80px" label-position="left">
        <print-barcodeForm></print-barcodeForm>
      </el-form>
    </el-dialog>


  </div>
</template>

<script>


//引入组件

import cesTable from "../Common//table.vue";
import SearchForm from "../Common//Search.vue";
import MianForm from "../Common//form.vue";
 import { PrintDate } from "@/api/Printv1";
import { funDownload, GetTableColsData, GetFormColsData } from "@/api/Common";
import { UpdateForm, DeleteRow, MRPData, IsPrintForm } from '@/api/MesSales/SOrder';
import vGetToolBar from "../Common/GetToolBar";
import vAccountOpen from "../Common/AccountOpen";
import vCUSTOpen from "../Common/CUSTOpen";
import vPRDTOpen from "../Common/PRDTOpen";
import printbarcodeForm from "../MesSales/barcodeForm";

export default {
  name: "SOrderForm",
  props: {
    inputName: String,
    required: true,
  },

  data() {
    //表单查询一般分为input，下拉框，和日期，下面是下拉框时的设置下拉信息的情况，我的项目没有用到，但是留着方便看

    return {
      MenuCode: "A050302",
      tableData: [],//表格数据
      FormData: [],//表格数据
      FormCols: [],//表头数据
      tableCols: [],//表格列数据
      StepSN: -1,
      WFStepSN: '0',
      billID: null,
      CompanyAppCode: "",
      ListLog: [],
      IsfunEdit: false,
      Search: {
        // 查询条件
        total: 0, // 总记录数
        pageSize: 13, // 一页显示的记录数
        page: 1, // /当前页码
        RNO: "002", // 表编号  根据Controller中对应的表编号
        jsWhere: "", // 自定义条件
      },

      cities: [
        {
          value: "0",
          label: "草稿",
        },
        {
          value: "1",
          label: "审核中",
        },
        {
          value: "2",
          label: "结案",
        },
        {
          value: "3",
          label: "作废",
        },
      ],
      SearchDialog: false,
      DialogBtnMargin: 0,
      dialogVisible: false,
      dialogFormVisible: false,
      dialogCUSTVisible: false,
      dialogPRDTVisible: false,
      dialogbarcodeVisible: false,
      ParmType: "",
      ProWhere: " and IDXI='A01'",
      PrdNo: null,

    }
  },

  components: { //引入组件后注册组件
    cesTable,
    SearchForm,
    MianForm,
    vAccountOpen,
    vCUSTOpen,
    printbarcodeForm,
    vPRDTOpen,

  },
  mounted() {

    this.getTableCols()
    this.getDataList()


  },
  methods: {


    //读取列配置
    async getTableCols() {
      this.tableCols = [];
      this.FormCols = [];

      const resCols = await GetFormColsData({ InterID: "332" });
      this.FormCols = resCols.data;

      const res = await GetTableColsData({ InterID: "333" });
      this.tableCols = res.data;
      // debugger

    },
    async getDataList() {




      if (this.inputName == null) {
        this.inputName = this.$route.query.billID;
      }

      const result = await UpdateForm({
        billID: this.inputName,
        IsPostBack: false,
      });

      this.FormData = result.data1.Table[0];

      this.tableData = result.data2.Table;


      this.ListLog = result.ListLog;
      this.StepSN = result.StepSN;
      this.CompanyAppCode = result.CompanyAppCode;



    }, OpenFindForm() {
      //打开搜索框
      this.SearchDialog = true;
      //计算外边距
      console.log(this.$refs.searchDialog.offsetHeight);
      this.DialogBtnMargin = this.$refs.searchDialog.offsetHeight - 40;
    }, async confirmData(submit) {
      // 提交数据，需要修改

      const Fresult = true;




      if (submit == 1) {


        let flag1 = this.$refs['reftableData'].validateForm();

        let flag = this.$refs['refFormData'].validateForm();






        if (flag == false || flag1 == false) {
          this.$notify({
            title: "不能提交",
            dangerouslyUseHTMLString: true,
            message: "不可为空，不能提交",
            type: "error",
          });
          Fresult = false;
          return false;

        }

        if (this.tableData.length <= 0) {
          this.$notify({
            title: "不能提交",
            dangerouslyUseHTMLString: true,
            message: "行没有数据，不能提交",
            type: "error",
          });
          Fresult = false;
          return false;

        }

      }

      let options = "保存中...";

      if (submit == 1) {
        options = "提交中...";
      } else if (submit == 2) {
        options = "审批中...";
      } else if (submit == 3) {
        options = "退回中...";
      }

      const loading = this.$loading({
        lock: true,
        text: options,
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });
      if (Fresult) {
        const result = await UpdateForm({
          HeadDate: JSON.stringify(this.FormData),
          BodyDate: JSON.stringify(this.tableData),
          billID: this.FormData.OrderNo,
          IsPostBack: true,
          submit: submit,
        });
        loading.close();
        this.FormData = result.data1.Table[0];
        this.tableData = result.data2.Table;
        this.ListLog = result.ListLog;
        this.StepSN = result.StepSN;
        this.CompanyAppCode = result.CompanyAppCode;


        if (result.code === 20000) {

          this.dialogVisible = false;
          this.$notify({
            title: result.msg,
            dangerouslyUseHTMLString: true,
            message: "",
            type: "success",
          });


          this.$router.push({
            path: "/MesSales/SOrderForm",
            query: { billID: this.FormData.OrderNo, IsPostBack: false },
          });
          //   this.roles = [];
        } else {
          this.$notify({
            title: result.msg,
            dangerouslyUseHTMLString: true,
            message: "",
            type: "error",
          });
        }
      }
    }, async handleMRPData() {

      const result = await MRPData({
        billID: this.FormData.OrderNo,
      });

      if (result.code === 20000) {

        this.dialogVisible = false;
        this.$notify({
          title: result.msg,
          dangerouslyUseHTMLString: true,
          message: "",
          type: "success",
        });

        this.roles = [];
      } else {
        this.$notify({
          title: result.msg,
          dangerouslyUseHTMLString: true,
          message: "",
          type: "error",
        });
      }


    },
    handleOpen(name) {


      if (name == "SalesManName") {
        this.ParmType = "SalesManName"; //传入参数
        this.dialogFormVisible = true;
      } else if (name == "CustomerName" || name == "CustomerCode") {
        this.ParmType = "CustomerName"; //传入参数
        this.dialogCUSTVisible = true;
      } else if (name == "PrdNo") {
        this.ParmType = "PrdNo"; //传入参数
        this.dialogPRDTVisible = true;
      }

    },
    FunrRowsAdd: function (Rows, ParmType) {
      //添加人员

      this.multipleTable = Rows[0];

      if (ParmType == "SalesManName") {
        this.FormData.SalesMan = this.multipleTable.UserCode;
        this.FormData.SalesManName = this.multipleTable.UserName;
        this.dialogFormVisible = false;

      } else if (ParmType == "CustomerName" || ParmType == "CustomerCode") {
        this.FormData.CustomerCode = this.multipleTable.CUS_NO;
        this.FormData.CustomerName = this.multipleTable.SNM;
        this.FormData.SalesManName = this.multipleTable.Salesman;
        this.FormData.SalesmanTEL = this.multipleTable.TEL1;
        this.FormData.SaleTo = this.multipleTable.ADR1;
        this.dialogCUSTVisible = false;

      } else if (ParmType == "PrdNo") {


        for (let v of Rows) {

          this.multipleTable = v;
          let row = {
            PrdNo: this.multipleTable.PrdNo,
            PrdName: this.multipleTable.PrdName,
            SPC: this.multipleTable.SPC,
            UT: this.multipleTable.UT,
            Price: this.multipleTable.Price
          };

          this.tableData.push(row);
        }

        this.dialogPRDTVisible = false;
      }


    },
    async handleEdit(scope) {
      // 修改

      let routeUrl = this.$router.push({
        path: "/MesSales/SalesBomForm",//更改
        query: { billID: scope.row.OrderNo, ProductNo: scope.row.PrdNo, IsPostBack: false },
      });
      window.open(routeUrl.href, "_top");




    },
    async handlebarcode() {
      // 修改

      if (this.PrdNo != null) {

        this.$confirm('条码生成操作, 是否继续? 订单号：' + this.billID + ' 产品编号' + this.PrdNo, '提示', {
          confirmButtonText: "确认",
          cancelButtonText: "取消",
        })
          .then(async () => {



            let routeUrl = this.$router.push({
              path: "/MesSales/barcodeForm",//更改
              query: { OrderNo: this.billID, ProductNo: this.PrdNo, IsPostBack: false },
            });
            window.open(routeUrl.href, "_top");




          })
          .catch((err) => {
            console.error(err);
          });
      } else {
        this.$notify({
          title: "条码操作，请选择数据",
          dangerouslyUseHTMLString: true,
          message: "",
          type: "error",
        });
      }





    }, handleAdd() {
      this.inputName = "";
      this.$route.query.billID = "";
      this.getDataList();

    }, handrowclick(row) {
      this.billID = row.OrderNo;
      this.PrdNo = row.PrdNo;
    },
    handleClose() {
      this.$store.dispatch('tagsView/delView', this.$route)
      // 返回上一步路由
      this.$router.go(-1)
    }, delData({ $index, row }) {
      this.$confirm('删除操作, 是否继续?', '提示', {
        confirmButtonText: "确认",
        cancelButtonText: "取消",
      })
        .then(async () => {


          this.tableData.splice($index, 1);



          if (row.OrderID == null) {
            return false;
          }

          const result = await DeleteRow({
            ID: row.OrderID,
            billID: this.inputName,
            types: 1,
            IsPostBack: false,
          });

          this.$message({
            type: "success",
            message: result.msg,
          });

        })
        .catch((err) => {
          console.error(err);
        });
    }, async PrintDate() {
      // 提交数据，需要修改

      await PrintDate('T20210425002', this.FormData, this.tableData, 2);

      await IsPrintForm({ billID: this.FormData.OrderNo });




    },

  }
}
</script>

<style lang="scss" scoped>
.app-container {
  .EditObjs-table {
    margin-top: 30px;
  }

  .permission-tree {
    margin-bottom: 5px;
  }
}

.searchDialog ::v-deep .el-dialog__header {
  background: #409eff;
}

.searchDialog ::v-deep .el-dialog__title {
  color: #fff;
}

.searchDialog ::v-deep .el-dialog__headerbtn .el-dialog__close {
  color: #fff;
}

.infoColor {
  font-weight: bold;
  color: #909399;
}

.redColor {
  font-weight: bold;
  color: red;
}

.blueColor {
  font-weight: bold;
  color: #409eff;
}

.orangeColor {
  font-weight: bold;
  color: orange;
}

.greenColor {
  font-weight: bold;
  color: #67c23a;
}
</style>